/**
 * <h2>PDStream 流相关操作器及其附属函数库.</h2>
 * <p>提供流操作器并可以提供更简便的进行 I/O 操作，每个 <b>操作器(工具)</b> 都需要绑定一个 <b>操作源(芯片)</b></p>
 * <pre><b>概念：</b>
 * <b>不稳定流</b> 指在 <b>网络流</b> 等环境中的流经常会获取到错误的长度信息，或输出出错等，故称为不稳定流。
 * 如:码云的仓库中的文件，就不可以直接获取长度进行读取，因为较长的文件会获取到不正确的长度
 * 操作器中会有{@code sustained} 和{@code monitor} 用于读写 <b>不稳定的流</b>
 * 参数根据操作器有所不同，但均包含一个 <b>数据片段大小要求</b> ，并可中断读写
 *
 * <b>稳定流</b> 指 <b>文件流</b> 等，因为可以正确的 <b>获取长度</b> 和稳定的读写
 * 稳定流可直接使用操作器中的 <b>常规方法</b> 进行读写，会比较快
 *
 * <b>连续操作</b> 指操作流的时候使用 <b>一定大小的缓存区</b> 进行操作，每次读写的东西都会先放入缓冲区<b>(片段)</b>。
 * 在读取到 <b>-1</b> 之前都会一直进行操作。这样可以保证即使获取不到正确的长度也可以正确的进行读写。
 * 均可使用 <b>接口</b> 调整下次操作的缓冲区的大小，根据操作器还会有不同的接口要求，但都包含一个更新片段大小的方法
 * 有些操作器可以对 <b>单次处理的片段数据</b> 进行处理
 * </pre>
 *
 * @author fybug
 * @version 0.1.6
 * @see fybug.nulll.pdfunctionlibrary.Processing.Err.Stop
 * @see fybug.nulll.pdfunctionlibrary.Processing.Err.CallStop
 * @see fybug.nulll.pdfunctionlibrary.Annotations.MaybeStop
 * @since JDK 1.8
 */
package fybug.nulll.pdstream;
import com.sun.istack.internal.NotNull;

import org.jetbrains.annotations.Contract;

import static fybug.nulll.pdfunctionlibrary.Util.Processing.Arrarys.conversionArrayType;
// 耦合接口
interface to<U, T> {
    @NotNull
    U conversionTo(@NotNull final T var1, final int bufferSize);

    // 检查和转化总方法
    @NotNull
    @Contract( pure = true )
    static
    <T, U> T[] to(final int bufferSize, @NotNull final U[] w, @NotNull final Class<T> tClass,
            @NotNull final to<T, U> objectCoupler)
    {
        // 检查长度
        final int buff = bufferSize <= 0 ? 1 : bufferSize;
        // 接口耦合
        return conversionArrayType(w, out -> objectCoupler.conversionTo(out, buff), tClass);
    }
}